#include <stdio.h>
#include <unistd.h>
#include <sys/shm.h>
#include <string.h>

// 共享内存的写进程

int main()
{
    //1.创建/获取共享内存
    //  变量shm_id用来保存共享内存的句柄 
    //  0664指用户具有读写权限，组用户和其它用户具有只读权限
    int shm_id = shmget(0x12121212,1024,IPC_CREAT | 0664);
    if(shm_id < 0) //创建失败
    {
        perror("shmget wrong\n");
        return 0;
    }
    //2.进程附加
    //  指针shm_add保存该进程中对应此共享内存的虚拟地址
    void* shm_add = shmat(shm_id,NULL,0);
    if(shm_add == NULL) //附加失败
    {
        perror("shmat wrong\n");
        return 0;
    }
    //  打印出这个虚拟地址观察一下
    printf("write_shm add:%p\n",shm_add);
    //3.写
    strcpy((char*)shm_add,"i am process A");
    //4.进程分离
    //  分离前必须输入字符才能执行
    getchar();
    shmdt(shm_add);

    return 0;
}
